package cn.lycode.common.core.page;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import java.util.HashMap;
import java.util.List;

/**
 * @Title: PageUtil
 * @Author lyg
 * @Date 2024/7/31 15:50
 * @description:
 */
public class PageUtil {

    public static void startPage(PageDomain pageDomain) {
        Integer pageNum = pageDomain.getPage();
        Integer pageSize = pageDomain.getLimit();
        String orderBy = pageDomain.getOrderBy();
        Boolean reasonable = pageDomain.getReasonable();
        PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
    }

    public static <T> PageResult<T> getPageResult(List<T> dataList) {
        PageInfo<T> pageInfo = new PageInfo<>(dataList);
        //PageInfo 类是 MyBatis 分页插件中的一个用于封装分页查询结果的工具类。
        //getTotal()：获取总记录数。
        //getPages()：获取总页数。
        //getPageNum()：获取当前页码。
        //getPageSize()：获取每页记录数。
        //getList()：获取当前页的数据列表。
        //isHasPreviousPage()：判断是否有上一页。
        //isHasNextPage()：判断是否有下一页。

        //当前页、每页记录数、 总页数、 总记录数、 结果集、额外参数
        return new PageResult<>(pageInfo.getPageNum(), pageInfo.getPageSize(),
                pageInfo.getPages(), pageInfo.getTotal(),dataList, new HashMap<>());
    }

    /**
     * 为了给带数据转换的VO分页用
     */
    public static <T, V> PageResult<V> getPageResult(List<T> originalDataList, List<V> voDataList) {
        PageInfo<T> pageInfo = new PageInfo<>(originalDataList);
        //PageInfo 类是 MyBatis 分页插件中的一个用于封装分页查询结果的工具类。
        //getTotal()：获取总记录数。
        //getPages()：获取总页数。
        //getPageNum()：获取当前页码。
        //getPageSize()：获取每页记录数。
        //getList()：获取当前页的数据列表。
        //isHasPreviousPage()：判断是否有上一页。
        //isHasNextPage()：判断是否有下一页。

        //当前页、每页记录数、 总页数、 总记录数、 结果集、额外参数
        return new PageResult<>(pageInfo.getPageNum(), pageInfo.getPageSize(),
                pageInfo.getPages(), pageInfo.getTotal(),voDataList, new HashMap<>());
    }

}
